/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upc.sistemaventas.persistencia;

import edu.upc.sistemaventas.dominio.CategoriaDomain;
import edu.upc.sistemaventas.dominio.PlanNegocioDomain;
import edu.upc.sistemaventas.dominio.PreguntaDomain;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 *
 * @author jdev5
 */
public class MySqlPreguntaDAO extends MySqlBaseDAO implements PreguntaDAO {

  public MySqlPreguntaDAO() throws Exception {
    super();
  }

  public int registrarPregunta(int idPlanNegocio, PreguntaDomain pregunta) {
    int idCorrelativo = -1;
    String sql = "insert into pregunta ( titulo, descripcion, estado_pregunta, respuesta, id_plan_negocio ) ";
    sql += " values ( ?, ?, ?, ?, ? ) ";
    try {
      PreparedStatement pstmt = db.getPreparedStatement(sql, true);
      pstmt.setString(1, pregunta.getTitulo());
      pstmt.setString(2, pregunta.getDescripcion());
      pstmt.setString(3, pregunta.getEstadoPregunta());
      pstmt.setString(4, pregunta.getRespuesta());
      pstmt.setInt(5, idPlanNegocio);
      pstmt.executeUpdate();
      ResultSet rs = pstmt.getGeneratedKeys();
      if (rs.next()) {
        idCorrelativo = rs.getInt(1);
      }
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return idCorrelativo;
  }

  public void actualizarRespuesta(int idPlanNegocio, int idPregunta, String respuesta) {
    String sql = "update pregunta ";
    sql += "         set respuesta = ? ";
    sql += "       where id_plan_negocio = ? ";
    sql += "         and id = ? ";
    try {
      PreparedStatement pstmt = db.getPreparedStatement(sql);
      pstmt.setString(1, respuesta);
      pstmt.setInt(2, idPlanNegocio);
      pstmt.setInt(3, idPregunta);
      pstmt.executeUpdate();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
  
  /*dmc*/
  public List<PreguntaDomain> listarPreguntas(int idPlanNegocio)
  {
    List<PreguntaDomain> listaPreguntas = null;
    String sql = "select id, titulo, descripcion, estado_pregunta, respuesta, id_plan_negocio ";
    sql += "        from pregunta c ";
    sql += "       where c.id_plan_negocio = ? ";
    try {
      listaPreguntas = new ArrayList<PreguntaDomain>();
      PreparedStatement pstmt = db.getPreparedStatement(sql);
      pstmt.setInt(1, idPlanNegocio);
      
      ResultSet rs = pstmt.executeQuery();
      while (rs.next()) {
        PreguntaDomain categoria = obtenerPreguntaLlena(rs);
        listaPreguntas.add(categoria);
      }
      return listaPreguntas;
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return null;
  }
  
    private PreguntaDomain obtenerPreguntaLlena(ResultSet rs) throws Exception {
    PreguntaDomain pregunta = new PreguntaDomain();
    pregunta.setId(rs.getInt("id"));
    pregunta.setTitulo(rs.getString("titulo"));
    pregunta.setDescripcion(rs.getString("descripcion"));
    pregunta.setEstadoPregunta(rs.getString("estado_pregunta"));
    pregunta.setRespuesta(rs.getString("respuesta"));
    
    PlanNegocioDomain plan = new PlanNegocioDomain();
    plan.setId(rs.getInt("id_plan_negocio"));
    
    pregunta.setPlanNegocio(plan);
    
    /*if (rs.getObject("id_padre") != null) {
      CategoriaDomain categoriaPadre = getCategoria(rs.getInt("id_padre"));
      pregunta.setCategoriaPadre(categoriaPadre);
    }*/
    return pregunta;
  }  
    
    public PreguntaDomain getPregunta(int idPregunta) {
    String sql = "select c.* ";
    sql += "        from pregunta c ";
    sql += "       where c.id = ? ";
    try {
      PreparedStatement pstmt = db.getPreparedStatement(sql);
      pstmt.setInt(1, idPregunta);
      ResultSet rs = pstmt.executeQuery();
      if (rs.next()) {
        PreguntaDomain pregunta = obtenerPreguntaLlena(rs);
        return pregunta;
      }
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return null;
  }
}
